#ifndef CLIENT_CONNET_H
#define CLIENT_CONNET_H

#include "Config.h"

#include <QWidget>
#include <QDebug>

#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>

#include <QTcpSocket>


class Client_connet : public QWidget
{
private:

    static Client_connet* m_Client;
    QTcpSocket *m_fd;
    QJsonObject *m_obj;

public:

    //成员变量
    user me;
    QVector<friends> frarr;
    QVector<Usetr> find_arr;

    Client_connet();

   //静态方法
    static Client_connet* Get_Connet() //获取返回静态成员指针
    {
        if(m_Client == nullptr)
        {
            m_Client = new Client_connet;
        }

        return m_Client;
    }


    //连接服务器
    void Connect_Server()
    {
        //只在为空时连接服务器
        if(m_fd == nullptr)
        {
            //创建连接对象
            m_fd = new QTcpSocket();

            //进行连接
            m_fd->connectToHost(Server_Ip,Server_port);

            if(m_fd->state() == QTcpSocket::UnconnectedState)
            {
                qDebug()<<"连接失败\n";
            }
        }
        else
        {
//            m_fd->connectToHost(Server_Ip,Server_port);

            qDebug()<<m_fd->state();
        }
    }

    QTcpSocket* getM_fd()
    {
        return m_fd;
    }

    //清理obj对象
    void clearM_obj()
    {
        if(m_obj == nullptr)
        {
            m_obj = new QJsonObject();
        }
        else
        {
            delete m_obj;
            m_obj = new QJsonObject();
        }
    }

    //对obj对象添加内容(重载)
    void set_obj(QString str1, QString str2)
    {
        m_obj->insert(str1,str2);
    }

    void set_obj(QString str1 ,int str2)
    {
        m_obj->insert(str1,str2);
    }

    void set_obj(QJsonObject js)
    {
        clearM_obj();
        *m_obj = js;
    }

    //发送信息
    void SendServer()
    {
        if(m_obj == nullptr)
        {
            qDebug()<<"JSON对象为空";
            return;
        }

        QJsonDocument data(*m_obj);
        m_fd->write(data.toJson());
        qDebug()<<"发送的请求："<<*m_obj;
        qDebug()<<"数据发送成功";

        //发送后置空
        clearM_obj();
    }

    //返回json指针
    QJsonObject* getM_obj()
    {
        if(m_obj == nullptr)
        {
            return nullptr;
        }
        else
        {
            return m_obj;
        }
    }


    //string转换为json
    QJsonObject parserStr(QString str)
    {
        //qDebug() << "In parser";
        QJsonParseError e;      // 记录解析错误
        QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8(),&e);   // 字符串转为QJsonDocument，再转json对象
        QJsonObject obj;

        if (e.error != QJsonParseError::NoError && !doc.isNull())
        {
            qDebug() << "parser error: " << e.error;
        }

        else
        {
            obj = doc.object();
        }

        return obj;
    }



    //为好友数组添加对象
    void setfrarr(friends f)
    {
        frarr.push_back(f);
        return;
    }
    //清除查询列表
    void clearfind_arr()
    {
        find_arr.clear();
    }

    //读取数据



    //定义槽函数
public slots:
    //正常读取数据
    void readData();


};

#endif // CLIENT_CONNET_H
